Introduzione

Secondo il vocabolario Treccani (http://www.treccani.it/vocabolario/musica/) la musica è:

“L’arte che consiste nell’ideare e nel produrre successioni strutturate di suoni semplici o complessi, …, per mezzo della voce umana, di strumenti o della combinazione di entrambe queste fonti. Da un punto di vista storico e antropologico, pur in maniera diversa da popolo a popolo, la musica si manifesta come forma di espressione culturale normalmente integrata con le varie attività sociali, concorrendo al collegamento fra conoscenza ed espressione, alla coesione sociale ed etnica, nonché alla trasmissione culturale.”

Quindi la musica è un’arte che pervade la nostra società e ne riflette quindi alcuni aspetti.

Il più delle volte la musica e valutazioni a riguardo sono trattate da un punto di vista soggettivo, con questo progetto si vuole condurre un’analisi riguardo la musica attraverso l’applicazione di varie tecniche oggettive sulle canzoni, considerando sia metadati relativi all’audio e alla canzone sia il testo.

In particolare risulta interessante scoprire l’andamento e l’eventuale variazione nel corso del tempo delle canzoni. Inoltre si vuole studiare il contenuto del testo delle canzoni sia per caratterizzarle dal punto di vista linguistico sia per determinare i sentimenti che vengono espressi.


Dataset

Per poter dare una risposta alle domande sopra citate sono stati usati alcuni dataset recuperati online ed un altro dataset creato da zero.

I dataset recuperati online sono i seguenti:

Il dataset creato da zero è stato costruito usando:


Preparazione dei dati

Serve scaricare il Million Song Subset e scaricare il musiXmatch Dataset che ha il testo delle canzoni come bag of words.

Il Million Song Subset è in formato hf5 invece il musiXmatch Dataset in un database sqlite. Quindi è meglio mettere tutto in un unico database principale, perciò va convertito il Million Song Subset in un file csv per poi unire i dati allo stesso database del musiXmatch Dataset.

Per convertire il dataset da hf5 a csv ho scritto un codice in python ( hdf5_to_csv.py ) perché con R ci sono dei problemi riguardo il formato hf5, come segnalato sul sito di riferimento del Million Song Subset:

“We planned to release a R wrapper and looked at the default HDF5 library for R on Ubuntu. Unfortunately, it crashes on empty arrays. This happens when a track has no musicbrainz tag, for instance. If any R specialist is willing to help us with this, please contact us!”

Serve scaricare il last.fm Dataset che ha i dati riguardo i tag di ciascuna canzone.

Si tratta di un database sqlite, quindi si copiano i dati nel database principale.

Ci sono 3 tabelle: una tabella di legame (tid_tag) che contiene i ROWID della canzone e del tag collegati e le altre due contengono una l’id della canzone e l’altra il tag. Si usa una query select con due join in modo da avere per ogni record l’id della canzone, il tag e la confidenze. Ci sono molti record, quindi si esegue la query a blocchi.

Serve scaricare il Thisismyjam datadump che ha i dati riguardo i jam creati dagli utenti per le canzoni ed i like che gli utenti hanno dato. I dati sono in file di testo in formato tsv, si legge un file di testo alla volta per creare una tabella nel database principale.

I jam si riferiscono ad una canzone tramite un id che non combacia con quello usato nel Million Song Subset, per questo motivo si usa thisismyjam-to-MSD che è un file tsv con la mappatura corretta.

Per riuscire a comprendere meglio alcuni aspetti relativi al testo delle canzoni si è creato un dataset da zero, in modo da avere il testo completo delle canzoni e non in formato bag of words.

Avendo in un file tsv tutte le canzoni vincitrici del festival di Sanremo dal 1962 al 2018 recuperate dall’ Articolo su Today si scaricano i testi di ciascuna cazone utilizzando la Genius API. Per alcune canzoni non ci sono i testi sull’api di Genius, quindi i testi delle canzoni mancanti sono stati scaricati dal sito Anglolo testi. In questo modo si ha un dataset che ha il titolo, l’anno, i cantanti ed il testo delle canzoni vincitrici di Sanremo. Si considerano anche altre features delle canzoni utilizzando Spotify Web API. Per poter ottenere le feature delle canzoni occorre sapere il loro identificativo su Spotify. Su Spotify ci sono varie playlist che raccolgono più canzoni e si può ottenere l’identificativo di tutte le canzoni appartenenti alla playlist usando l’api, a patto di sapere l’identtificativo della playlist e dell’utente che l’ha creata. Cercando su google “sanremo all winners spotify” il primo risultato ottenuto è “https://open.spotify.com/user/1138907986/playlist/6H1azszUVaSFoV99Dqi2pI”: quindi assumendo che questo risultato si riferisce ad una playlist Spotify con tutte le canzoni vincitrici di Sanremo e che l’identificativo dell’utente è 1138907986 e l’identificativo della playlist è 6H1azszUVaSFoV99Dqi2pI, si procede ad interrogare il servizio api con questi input. I dati scaricati dall’api di Spotify sono coerenti; tuttavia i titoli e gli artisti delle canzoni sono scritti in un modo leggermente diverso rispetto ai titoli usati nel dataset. Quindi per integrare questi altri dati nel dataset si fa un matching tra le stringhe dei titoli e degli artisti e le ambiguità che rimangono vengono risolte “a mano”.


Analisi esplorativa sui dati delle canzoni

Risulta che più del 50% di canzoni ha il valore 0 per il campo year, cioè per queste canzoni non si ha il dato relativo all’anno. Considerando solo le canzoni con il dato sull’anno (in totale 4680) si possono raggruppare le canzoni per decennio, ad esempio una canzone del 1986 appartiene al decennio 1980-1990. La distribuzione del numero di canzoni per decennio è la seguente:

Si può notare che la maggior parte delle canzoni, di cui si sa l’anno, è distribuita soprattutto attorno al 2000.

Le canzoni più vecchie appartengono al decennio 1920-1930 e sono:

Analizzando i metadati associati alle canzoni si osserva che ci sono dei valori di correlazione non trascurabili tra alcune variabili.

artist familiarity è un indicazione su quanto è conosciuto l’artista ed è strettamente correlata con artist hotness che esprime quanto interessante è l’artista secondo il pubblico. Inoltre c’è anche una certa correlazione con song hotness che indica quanto interessante è la canzone secondo il pubblico.

La maggior parte delle canzoni si riferisce a posizioni geografiche con latitudine positiva, quindi l’emisfero nord, inoltre ci sono due gruppi molto concentrati attorno ai valori di longitudine 0 e -100, approssimativamente Europa e Stati Uniti.

Sembra che le canzoni con una posizione nell’emisfero sud, latitudine<0, hanno stesso valore di artist hotness (circa 0.5) e per longitudine>0 stessa situazione (quindi è possibile avere valori estremi di artist hotness principalmente negli Stati Uniti).

All’ aumentare degli anni ci sono canzoni con valori di loudness sempre più elevati, il che significa che ci sono canzoni con rumorosità sempre più alta. Questo aspetto riflette la tendenza dell’industria musicale a registrare, produrre e diffondere musica, anno dopo anno, con livelli di volume progressivamente più alti, per creare un suono che superi in volume i concorrenti e le registrazioni dell’anno precedente (la cosiddetta Loudness war).

Inoltre all’aumentare degli anni accade che anche la durata della canzone aumenta, anche se in modo meno evidente.

Si può analizzare meglio la correlazione tra artist hotness, artist familiarity e song hotness rappresentando in uno scatter plot le varie canzoni che hanno i valori di song hotness. Sull’asse x si usa artist familiarity, sull’asse y si usa artist hotness ed i punti sono colorati in base al valore di song hotness: i punti più chiari rappresentano canzoni con un grande valore di song hotness, viceversa i punti più scuri rappresentano canzoni con un piccolo valore di song hotness.

Ci sono alcune canzoni che hanno valori nulli per artist familiarity e artist hotness, per le altre canzoni si nota chiaramente che all’aumentare di artist familiarity anche artist hottness aumenta in modo praticamente lineare. Inoltre le canzoni che hanno grandi valori per song hotness hanno anche grandi valori per le altre due variabili. Questo significa che se un artista è poco conosciuto è anche poco “appetibile” mentre se è molto conosciuto molto probabilmente le sue canzoni risulteranno molto interessanti al pubblico. Tuttavia ci sono dei casi in cui un cantante è poco conosciuto ma la sua canzone ha generato un grande interesse nel pubblico e viceversa, in alcuni casi cantanti famosi hanno avuto canzoni che non hanno fatto successo.

Riguardo l’argomento Loudness war risulta che quando si mettono a confronto due registrazioni con livelli differenti, è probabile che quella dal volume più alto venga considerata anche quella che suona meglio, inoltre le canzoni con volumi più alti attirano magiormente l’attenzione. Nei grafici seguenti si evidenziano meglio queste osservazioni confrontando il valore di rumorosità delle canzoni con l’anno corrispondente e il valore di gradimento da parte del pubblico.

Appare evidente il fatto che con il passare degli anni la maggioranza delle canzoni ha livelli di rumorosità sempre più elevati e che le canzoni più gradite sono generalmente quelle con volumi più alti.

Le osservazioni fatte riguardo la posizione geografica dell’artista verranno qui di seguito approfondite e confermate. In questa mappa del mondo sono state rappresentate le canzoni sotto forma di punti colorati in base all’interesse attribuito alla canzone da parte del pubblico.

La maggior parte di canzoni è associata a cantanti negli Stati Uniti e poi in Europa.

C’è una grande concetrazione di canzoni che proviene dagli Stati Uniti e dall’Europa, la gran parte delle canzoni è attribuita ad una di queste due aree.

Osservando le canzoni più vecchie si nota che anche loro appartengono a queste aree.

Ecco il grafico con la mappa del mondo e sovrapposti i punti che corrispondono alle canzoni più vecchie.

Le canzoni più vecchie e più recenti che non appartengono al gruppo di canzoni dell’Europa e Stati Uniti sono:


Analisi sul testo delle canzoni

Si considera oltre ai dati sulle canzoni anche il testo corrispondente; non si ha il testo per tutte le canzoni, in ogni caso le osservazioni fatte considerando tutte le canzoni sono state verificate anche su questo sottoinsieme e rimangono valide.

Per la maggior parte dei casi le canzoni sono costituite da un numero totale di parole che varia tra 140 e 290, mentre il numero di parole diverse che vengono usate è compreso tra 60 e 100; infatti il valore di diversità delle canzoni, ossia il rapporto tra il numero di parole diverse ed il numero totale di parole, è solitamente tra 0.31 e 0.49. (I valori per gli intervalli sono calcolati in base al primo e terzo quantile della distribuzione dei valori associati alle canzoni)

Il numero di parole che formano una canzone nel corso del tempo.

Il numero di parole che forma una canzone influenza il grado di diversità della canzone ma il valore di song hotness non dipende da queste variabili.

La maggiorparte delle canzoni ha un piccolo valore di diversità (circa 0.3) e un numero totale di parole attorno a 200. Le canzoni con un alto valore di diversità (>0.6) sono composte da poche parole (<150), mentre le altre canzoni hanno come numero totale di parole sia valori piccoli che grandi.

Nel seguente grafico sono rappresentate le parole più frequenti con il corrispondente numero di occorrenze.

Eliminando le stopwords si ha:

Le parole più usate e durature con il passare degli anni sono:

Ecco una visualizzazione dell’uso di alcune delle parole più usate nelle canzoni nel corso degli anni.

Analisi dei tag associati alle canzoni

Con il dataset last.fm si hanno a disposizione vari tag associati alle canzoni dagli utenti. Ogni canzone è associata a più tag, ciascuno con un certo grado di confidenza e ci sono più di 33000 tags diversi. Di seguito si può visualizzare quanti tag vengono associati solitamente ad una canzone a seconda dell’anno.

Tanti tag compaiono solo una volta, cioè sono associati a solo una canzone. Considerando non solo l’associazione tra i tag e le canzoni ma anche il grado di confidenza, si osserva che i tag usati di più e con maggior grado di confidenza sono la minoranza; la maggior parte di tag risulta essere poco usata, cioè sono tag associati a poche canzoni.

Nella seguente word of cloud sono rappresentati i tag più utilizzati mettendo in evidenza i tag che sono maggiormente usati nel corso degli anni.

Controlla l’andamento dell’uso dei tag più usati nel corso del tempo.

I primi 10 tag più usati ( top ten ) per ciascun anno sono diversi da anno in anno, in totale ci sono più di 700 tag diversi, quindi si considerano solo i 20 tag che appaiono più volte nelle top ten dei diversi anni.

Si può notare il pattern abbastanza scontato dei tag 60s, 70s, 80s, 90s che sono associati alle canzoni appartenenti allo stesso decennio, anche se ci sono delle canzoni del decennio 1970-1980 associate a 80s. Prima del 1960 le canzoni sono associate principalmente al tag blues (il tag più “vecchio”, cioè associato a canzoni con minor anno 1926) e in parte a country (tag apparso dopo il 1935).

I tag più usati negli ultimi anni sono rock, (che è un tag usato praticamente ogni anno a partire dal 1964), pop (apparso due anni prima del rock ma per il periodo tra il 1965 e 1985 usato ad “intermittenza”) e tag abbastanza recenti (ossia il loro uso è iniziato negli ultimi anni) come alternative, Hip-Hop, indie, alternative rock, female vocalists ed electronic.

Un altro aspetto interessante da considerare è il periodo in cui è stato usato un tag:

I tag relativi al decennio 60s, 70s, 80s e 90s sono associati praticamente solo a canzoni del decennio corrispondente. I tag blues e country sono i tag apparsi con le canzoni più vecchie ma risultano non più usati, mentre electronic è uno dei tag più recenti ed è anche tra i tag più usati negli ultimi anni. Risulta interessante anche il fatto che il tag female vocalists è tra quelli più usati negli ultimi anni ma è associato a canzoni che risalgono già al 1960.

Combinando insieme i tag associati alle canzoni e i dati ricavati dal testo delle canzoni si osserva la distribuzione del numero di parole in una canzone a seconda del tag a cui è associata la canzone. Le canzoni con il tag Hip-Hop sono quelle che solitamente sono composte da un grande numero di parole (più di 500), rispetto le canzoni associate agli altri tag, che sono più o meno formate dallo stesso numero di parole che è attorno a 250. Considerando il numero di parole diverse le canzoni con il tag Hip-Hop rimangono separate dalle altre infatti hanno un grande numero di parole diverse (più di 150), rispetto alle altre, che hanno un numero di parole diverse attorno a 75.

In generale i tag associati alle canzoni con il minor numero di parole sono electronic, hardcore e punk mentre i tag associati alle canzoni con il maggior numero di parole sono rap ed Hip-Hop. Le canzoni associate ai tag classic rock e hard rock sono le canzoni più simili tra loro per quanto riguarda il numero di parole che le compongono, il numero di parole delle canzoni di questo gruppo non varia tanto rispetto alle canzoni con altri tag.

Le canzoni associate al tag Hip-Hop hanno un grado di negatività molto alto, al contrario le canzoni associate al tag pop hanno un grado di positività molto alto mentre le canzoni associate agli altri tag sono generalmente neutre e in parte sia positive che negative ma con valori più bassi. Ecco la distribuzione del sentimento (grado di positività) delle canzoni a seconda del tag a cui sono associate.

I tag associati alle canzoni con i più grandi valori di sentimento positivo sono 80s, pop e classic rock mentre i tag associati a canzoni con grandi valori di sentimento negativo sono rap, hardcore e hip-Hop.

Risulta che i tag rap e Hip-Hop sono simili tra loro sia per quanto riguarda il numero di parole usate nelle canzoni che per il valore di sentimento associato alle parole usato nelle canzoni.


Preferenze degli utenti

Considerando anche le preferenze degli utenti nei confronti delle canzoni, utilizzando i dati relativi al dataset thisisjam, si conclude che il numero di jam e like non sembra essere tanto correlato con l’anno e nemmeno con song hotness; per quanto riguarda il sentimento della canzone risulta che la maggior parte di like e jam è attribuita a canzoni con un valore neutrale, inoltre allontanandosi da valori neutrali il numero di like diminusice.

C’è una canzone con un alto grado di positività che ha anche numerosi like.

Si tratta di “(This Is Not A) Love Song” (Letteralmente “Questa non è una canzone d’amore”), è un singolo del gruppo post-punk Public Image Ltd. La canzone irride le critiche dei fan e della stampa musicale mosse alla band accusata di star progressivamente “ammorbidendosi” per orientarsi verso sonorità maggiormente commerciali. Il titolo della canzone è ispirata a una strofa della canzone Her Story (1979) dei compagni di etichetta Virgin Flying Lizards, circa i gruppi che si “svendevano” per raggiungere il successo commerciale. Il motivo per il quale la canzone ha un alto grado di positività è dovuto al fatto che la parole “love” è molto ripetuta. Ecco qui le prime 5 canzoni che ripetono più volte la parola “love”, tra le quali c’è anche “(This Is Not A) Love Song” (in terza posizione):

Queste canzoni hanno anche un grande valore di positività, leggendo il testo di queste canzoni si può confermare che si trattano di canzoni con sentimenti positivi. Nonostante la canzone “(This Is Not A) Love Song” neghi il fatto di essere una canzone d’amore, il punteggio riguardo al sentimento è positivo; questo perché, avendo a disposizione il testo della canzone in formato bag of words, non si riesce a riconoscere che la parola “love” è preceduta da una negazione. In ogni caso la canzone non esprime sentimenti negativi.


Analisi sul dataset Sanremo

Analizzando il numero di parole usato in ciascuna canzone nel corso degli anni si nota che l’andamento del numero totale di parole che compongono una canzone è crescente ed anche il numero di parole diverse che compaiono in una canzone incrementa con il passare degli anni. Tuttavia la crescita del numero totale di parole è maggiore rispetto alla crescita del numero di parole diverse che vengono usate, questo provoca l’abbassamento del valore di diversità delle canzoni nel corso degli anni.

Nel grafico seguente sull’asse x ci sono gli anni, sull’asse y il valore del numero di parole totali e diverse delle canzoni rappresentate con dei punti, la cui dimenzione è proporzionale al valore di diversità.

Il più basso valore di diversità è 0.28 ed è ottenuto dalla canzone con il titolo “Al di là” del 1961 (29 parole diverse e 102 parole totali) e dalla canzone con il titolo “Solo Noi” del 1980 (87 parole diverse e 306 parole totali).

Il più alto valore di diversità è 0.72 ed è ottenuto dalla canzone con il titolo “Uno per tutte” del 1963 (71 parole diverse e 98 parole totali).

Di seguito c’è l’elenco delle canzoni con il numero di parole totali, il numero di parole diverse ed il valore di diversità.

Confrontado il numero di parole totali, numero di parole diverse e l’indice di diversità delle canzoni tra i due dataset ( Million Song Subset e Sanremo ) si mette in luce che le canzoni di Sanremo hanno solitamente un numero totale di parole minore rispetto a quelle di Million Song Subset ma un numero di parole diverse maggiore. Infatti l’aspetto più rilevante è che le canzoni di Sanremo hanno valori di diversità maggiori rispetto alle canzoni di Million Song Subset, rispettivamente [0.44, 0.56] rispetto a [0.31, 0.49] (i valori per gli intervalli sono calcolati in base al primo e terzo quantile della distribuzione dei valori associati alle canzoni).

Le parole comparse il maggior numero di volte nelle varie canzoni di Sanremo sono: più (135), amore (125), te (108), solo (91) e me (88). più, amore, te e me sono anche le prime quattro parole che sono state usate nel maggior numero di canzoni, mentre solo si posiziona all’ottavo posto, è al quarto posto come parola più volte ripetuta a causa della canzone dal titolo “Solo noi” in cui appare per 50 volte.

In questa word cloud sono visualizzate tutte le parole che compongono le canzoni vincitrici di Sanremo.

Considerando gli n-grammi composti da 2 a 5 parole si genera un’altra wordcloud. Per mettere in luce gli n-grammi più interessanti sono stati eliminati gli n-grammi che contengono più di una stopword o contengono meno di cinque caratteri, inoltre vengono trascurati gli n-grammi che sono apparsi in una sola canzone.


Analisi sulle co-occorrenze delle parole

Risulta interessante evidenziare quali sono le parole che sono spesso insieme nelle varie canzoni.

In questo grafico sono rappresentate le 10 parole che sono presenti spesso con la parola amore in molte canzoni, inoltre per ciascuna di esse le 5 parole che sono più spesso presenti insieme a quest’ultime. I nodi del grafo rappresentano le varie parole e la loro dimensione è maggiore per le parole che sono usate in tante canzoni; gli archi hanno la larghezza e la trasparenza proporzionali al grado di co-occorrenza tra le parole collegate.


Sentiment analysis

Si adotta come lexicon di parole associate al sentimento il lexicon preso da https://github.com/AndreaCirilloAC/TweetIT/tree/master/lexicon/IT. Contiene due liste di parole: una per quelle associate a sentimenti positivi ed una per quelle associate a sentimenti negativi. Per ogni canzone si contano le occorrenze delle parole positive e di quelle negative e si associa alla canzone il grado di positività che consiste nella differenza tra il numero di parole positive ed il numero di parole negative.

Si mettono in evidenza le canzoni che hanno tante parole positive e anche tante parole negative, cioè canzoni con un alto grado di contrasto, per far questo si calcola il valore del prodotto del punteggio dato dalle parole positive e negative. In questo modo le canzoni con sia parole positive che negative hanno valori di contrasto che sono elevati nel caso si usino tante parole legate ad entrambi i tipi di sentimento. Nel caso in cui le parole che compongono la canzone sono tutte positive oppure tutte negative allora si ha un valore pari a zero.

Risulta che maggiore è il valore dell’indicatore contrasto minore è il grado di poitività associato alla canzone.

La canzone con il più grande valore di contrasto è “Per tutte le volte che” del 2010, che è anche la canzone con il più basso valore di positività. Una possibile interpretazione della canzone è la seguente: la storia d’amore di un ragazzo che con tutte le contraddizioni della coppia riesce comunque a provare sentimenti d’amore e romanticismo anche se ormai la ragazza sembra sempre più distante.


Variazioni nel corso del tempo

Usando le features di Spotify si conferma il fatto che all’aumentare degli anni aumentano i valori di loudness. Inoltre aumentano anche i valori per energy (esprime il grado di intensità con cui viene percepita la canzone) ed in modo meno evidente anche danceability (indica quanto adatta è la canzone ad essere ballata).

Inoltre track popularity, che è un valore calcolato principalmente basandosi sul numero di volte che è stata ascoltata la canzone dando più peso agli ascolti più recenti, risulta con valori più alti per le canzoni degli ultimi anni. Comunque è da notare che ci sono alcune canzoni recenti poco ascoltate mentre le canzoni con i più bassi valori di positività, anche se non proprio recenti hanno dei valori di track popularity superiori alla media.


Topic modelling

Le canzoni di Sanremo esprimono generalmente sentimenti positivi e la maggior parte utilizza la parola amore. Si può notare che le varie canzoni sono abbastanza analoghe in termini di argomenti: il tema centrale è l’amore e non ci sono tante variazioni riguardo gli argomenti trattati.

Suddividendo le canzoni secondo due topic usando la tecnica lda (latent Dirichlet allocation) si può verificare che oltre ad essere molto simili sono apparsi nel corso del tempo in modo omogeneo: non c’è un pattern evidente rispetto agli anni riguardo l’uso del primo o del secondo.


Per concludere

Infine una proposta per la generazione del testo per la prossima canzone vincitrice del festival di Sanremo.

Utilizzando la distribuzione degli n-grammi composti da 1 a 3 parole osservata nelle canzoni, si genera una sequenza di parole secondo questa distribuzione. La sequenza è costituita da un numero di parole che segue la distribuzione del numero totale di parole delle canzoni analizzate.

Ecco un esempio di testo generato nel modo appena desritto.

## la dignità fingere fingere fingere non sai pi distinguere che giorno e poi non nemmeno bella per elisa paghi sempre tu e non ti ho vicino perdere lamore maledetta sera e raccogli i cocci di una vita immaginaria pensi che domani un giorno nuovo ma ripeti non me laspettavo prendere a sassate tutti i sogni ancora in volo li far cadere ad uno ad uno spezzer le ali del destino e ti avr vicino perdere lamore maledetta sera e raccogli i cocci di una vita immaginaria pensi che domani un giorno nuovo ma ripeti non me laspettavo non me laspettavo prendere a sassate tutti i sogni ancora in volo li far cadere ad uno ad uno spezzer le ali del destino e ti avr vicino comunque ti capisco e ammetto che sbagliavo facevo le tue scelte chissà che pretendevo e adesso che rimane di tutto il tempo insieme un uomo troppo solo che ancora ti vuol bene perdere lamore quando si fa sera quando tra i capelli un p dargento li